<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
 <meta>
  <!-- Stylesheets -->
  <link href="../web.css" type="text/css" rel="stylesheet"></link>
  <link href="../pygmentize.css" type="text/css" rel="stylesheet"></link>
  <title>VLFeat - Documentation - C API</title>
  <link rel="stylesheet" type="text/css" href="../doxygen.css"></style>

  <!-- Scripts-->
  
 </meta>

 <!-- Body Start -->
 <body>
  <div id="header">
   <!-- Google CSE Search Box Begins -->
   <form action="http://www.vlfeat.org/search.html" method="get" id="cse-search-box" enctype="application/x-www-form-urlencoded">
    <div>
     <input type="hidden" name="cx" value="003215582122030917471:oq23albfeam"></input>
     <input type="hidden" name="cof" value="FORID:11"></input>
     <input type="hidden" name="ie" value="UTF-8"></input>
     <input type="text" name="q" size="31"></input>
     <input type="submit" name="sa" value="Search"></input>
    </div>
   </form>
   <script src="http://www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en" xml:space="preserve" type="text/javascript"></script>
   <!-- Google CSE Search Box Ends -->
   <h1><a shape="rect" href="../index.html" class="plain"><span id="vlfeat">VLFeat</span><span id="dotorg">.org</span></a></h1>
  </div>
  <div id="headbanner">
   Documentation - C API
  </div>
  <div id="pagebody">
   <div id="sidebar"> <!-- Navigation Start -->
    <ul>
<li><a href="../index.html">Home</a>
</li>
<li><a href="../download.html">Download</a>
</li>
<li><a href="../doc.html">Documentation</a>
<ul>
<li><a href="../mdoc/mdoc.html">Matlab API</a>
</li>
<li><a href="index.html" class='active' >C API</a>
</li>
<li><a href="../man/man.html">Man pages</a>
</li>
</ul></li>
<li><a href="../overview/tut.html">Tutorials</a>
</li>
<li><a href="../applications/apps.html">Applications</a>
</li>
</ul>

   </div> <!-- sidebar -->
   <div id="content">
    
    <link rel="stylesheet" type="text/css" href="../doxygen.css"></style>
    <div class="doxygen">
<div>
<!-- Generated by Doxygen 1.7.5.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">generic.c File Reference</div>  </div>
</div>
<div class="contents">

<p>Generic - Definition.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="generic_8h.html">generic.h</a>&quot;</code><br/>
<code>#include &lt;assert.h&gt;</code><br/>
<code>#include &lt;stdlib.h&gt;</code><br/>
<code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;stdarg.h&gt;</code><br/>
<code>#include &lt;math.h&gt;</code><br/>
<code>#include &lt;Windows.h&gt;</code><br/>
<code>#include &lt;unistd.h&gt;</code><br/>
</div><table class="memberdecls">
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#ae7c089c95c8bff8fb32284fdeb4818a8">vl_get_version_string</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get version string.  <a href="#ae7c089c95c8bff8fb32284fdeb4818a8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#af5d5bc78259d28d72a02d730e5f14b04">vl_configuration_to_string_copy</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Human readable library configuration.  <a href="#af5d5bc78259d28d72a02d730e5f14b04"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#ad4772f51849960d0d88e434a157fbceb">do_nothing_printf</a> (char const *format,...)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">A printf that does not do anything.  <a href="#ad4772f51849960d0d88e434a157fbceb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#ab305fa7aba6c2a4d543162fd3e146960">vl_lock_state</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Lock VLFeat state.  <a href="#ab305fa7aba6c2a4d543162fd3e146960"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a8931cffd4ffeeaa43c217bf8005da38f">vl_unlock_state</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Unlock VLFeat state.  <a href="#a8931cffd4ffeeaa43c217bf8005da38f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a7a3ebca801573280aafbea04578ef124">vl_set_last_error</a> (int error, char const *errorMessage,...)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set last VLFeat error.  <a href="#a7a3ebca801573280aafbea04578ef124"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#ac04fe278ac908fa6ed02bda099588cf0">vl_set_alloc_func</a> (void *(*malloc_func)(size_t), void *(*realloc_func)(void *, size_t), void *(*calloc_func)(size_t, size_t), void(*free_func)(void *))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set memory allocation functions.  <a href="#ac04fe278ac908fa6ed02bda099588cf0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a17ef7f5dfc74e0ff032f46617a5bc1c5">vl_set_printf_func</a> (<a class="el" href="generic_8h.html#abed0f89efbee38c21c99d2967bab01c1">printf_func_t</a> printf_func)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set printf function.  <a href="#a17ef7f5dfc74e0ff032f46617a5bc1c5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a4a2af50f50dfc91505947ced9656f5e7">vl_get_cpu_time</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get processor time.  <a href="#a4a2af50f50dfc91505947ced9656f5e7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a0eb9d2de6dc4cb6570db6bb3e8c39244">vl_tic</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset processor time reference The function resets VLFeat TIC/TOC time reference.  <a href="#a0eb9d2de6dc4cb6570db6bb3e8c39244"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a6570090509ab5a156a24e2bbd082590d">vl_toc</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get elapsed time since tic.  <a href="#a6570090509ab5a156a24e2bbd082590d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structVlRand.html">VlRand</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#ac0ce7fb575acd4f01cbb4a275ba84700">vl_get_rand</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the random number generator for this thread.  <a href="#ac0ce7fb575acd4f01cbb4a275ba84700"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a18be2cdce723b0cacc342e0e3c47d87a">vl_constructor</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize VLFeat.  <a href="#a18be2cdce723b0cacc342e0e3c47d87a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#aa3d76b59c0a5e7c45f80e172ec042c93">vl_destructor</a> ()</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Destruct VLFeat.  <a href="#aa3d76b59c0a5e7c45f80e172ec042c93"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="var-members"></a>
Variables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structVlState.html">VlState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="generic_8c.html#a4103c75c5cf944bff8dce736cbb70070">_vl_state</a></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><dl class="author"><dt><b>Author:</b></dt><dd>Andrea Vedaldi </dd></dl>
</div><hr/><h2>Function Documentation</h2>
<a class="anchor" id="ad4772f51849960d0d88e434a157fbceb"></a><!-- doxytag: member="generic.c::do_nothing_printf" ref="ad4772f51849960d0d88e434a157fbceb" args="(char const *format,...)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int do_nothing_printf </td>
          <td>(</td>
          <td class="paramtype">char const *&#160;</td>
          <td class="paramname"><em>format</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname"><em>...</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="af5d5bc78259d28d72a02d730e5f14b04"></a><!-- doxytag: member="generic.c::vl_configuration_to_string_copy" ref="af5d5bc78259d28d72a02d730e5f14b04" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char* vl_configuration_to_string_copy </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>a new string with the library configuration.</dd></dl>
<p>The function returns a new string with a human readable rendition of the library configuration. </p>

</div>
</div>
<a class="anchor" id="a18be2cdce723b0cacc342e0e3c47d87a"></a><!-- doxytag: member="generic.c::vl_constructor" ref="a18be2cdce723b0cacc342e0e3c47d87a" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void vl_constructor </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="aa3d76b59c0a5e7c45f80e172ec042c93"></a><!-- doxytag: member="generic.c::vl_destructor" ref="aa3d76b59c0a5e7c45f80e172ec042c93" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void vl_destructor </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a4a2af50f50dfc91505947ced9656f5e7"></a><!-- doxytag: member="generic.c::vl_get_cpu_time" ref="a4a2af50f50dfc91505947ced9656f5e7" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double vl_get_cpu_time </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>processor time. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="generic_8h.html#a0eb9d2de6dc4cb6570db6bb3e8c39244" title="Reset processor time reference The function resets VLFeat TIC/TOC time reference.">vl_tic</a>, <a class="el" href="generic_8h.html#a6570090509ab5a156a24e2bbd082590d" title="Get elapsed time since tic.">vl_toc</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ac0ce7fb575acd4f01cbb4a275ba84700"></a><!-- doxytag: member="generic.c::vl_get_rand" ref="ac0ce7fb575acd4f01cbb4a275ba84700" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structVlRand.html">VlRand</a>* vl_get_rand </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>random number generator.</dd></dl>
<p>The function returns a pointer to the random number genrator for this thread. </p>

</div>
</div>
<a class="anchor" id="ae7c089c95c8bff8fb32284fdeb4818a8"></a><!-- doxytag: member="generic.c::vl_get_version_string" ref="ae7c089c95c8bff8fb32284fdeb4818a8" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">char const* vl_get_version_string </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="return"><dt><b>Returns:</b></dt><dd>library version string </dd></dl>

</div>
</div>
<a class="anchor" id="ab305fa7aba6c2a4d543162fd3e146960"></a><!-- doxytag: member="generic.c::vl_lock_state" ref="ab305fa7aba6c2a4d543162fd3e146960" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_lock_state </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The function locks VLFeat global state mutex.</p>
<p>The mutex is recursive: locking multiple times from the same thread is a valid operations, but requires an equivalent number of calls to <a class="el" href="generic_8h.html#a8931cffd4ffeeaa43c217bf8005da38f" title="Unlock VLFeat state.">vl_unlock_state</a>.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="generic_8h.html#a8931cffd4ffeeaa43c217bf8005da38f" title="Unlock VLFeat state.">vl_unlock_state</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ac04fe278ac908fa6ed02bda099588cf0"></a><!-- doxytag: member="generic.c::vl_set_alloc_func" ref="ac04fe278ac908fa6ed02bda099588cf0" args="(void *(*malloc_func)(size_t), void *(*realloc_func)(void *, size_t), void *(*calloc_func)(size_t, size_t), void(*free_func)(void *))" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_set_alloc_func </td>
          <td>(</td>
          <td class="paramtype">void *(*)(size_t)&#160;</td>
          <td class="paramname"><em>malloc_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *(*)(void *, size_t)&#160;</td>
          <td class="paramname"><em>realloc_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *(*)(size_t, size_t)&#160;</td>
          <td class="paramname"><em>calloc_func</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(void *)&#160;</td>
          <td class="paramname"><em>free_func</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">malloc_func</td><td>pointer to <code>malloc</code>. </td></tr>
    <tr><td class="paramname">realloc_func</td><td>pointer to <code>realloc</code>. </td></tr>
    <tr><td class="paramname">calloc_func</td><td>pointer to <code>calloc</code>. </td></tr>
    <tr><td class="paramname">free_func</td><td>pointer to <code>free</code>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a7a3ebca801573280aafbea04578ef124"></a><!-- doxytag: member="generic.c::vl_set_last_error" ref="a7a3ebca801573280aafbea04578ef124" args="(int error, char const *errorMessage,...)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int vl_set_last_error </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>error</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char const *&#160;</td>
          <td class="paramname"><em>errorMessage</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname"><em>...</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The function sets the code and optionally the error message of the last encountered error. <em>errorMessage</em> is the message format. It uses the <code>printf</code> convention and is followed by the format arguments. The maximum lenght of the error message is given by <a class="el" href="generic_8h.html#af35e10968d642caab4fbffe6f4b0789c" title="Maximum length (in characters) of an error message.">VL_ERR_MSG_LEN</a> (longer messages are truncated).</p>
<p>Passing <code>NULL</code> as <em>errorMessage</em> sets the error message to the empty string.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">error</td><td>error code. </td></tr>
    <tr><td class="paramname">errorMessage</td><td>error message format string. </td></tr>
    <tr><td class="paramname">...</td><td>format string arguments. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>error code. </dd></dl>

</div>
</div>
<a class="anchor" id="a17ef7f5dfc74e0ff032f46617a5bc1c5"></a><!-- doxytag: member="generic.c::vl_set_printf_func" ref="a17ef7f5dfc74e0ff032f46617a5bc1c5" args="(printf_func_t printf_func)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_set_printf_func </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="generic_8h.html#abed0f89efbee38c21c99d2967bab01c1">printf_func_t</a>&#160;</td>
          <td class="paramname"><em>printf_func</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">printf_func</td><td>pointer to <code>printf</code>. Let <code>print_func</code> be NULL to disable printf. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a0eb9d2de6dc4cb6570db6bb3e8c39244"></a><!-- doxytag: member="generic.c::vl_tic" ref="a0eb9d2de6dc4cb6570db6bb3e8c39244" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_tic </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="generic_8h.html#a4a2af50f50dfc91505947ced9656f5e7" title="Get processor time.">vl_get_cpu_time</a>, <a class="el" href="generic_8h.html#a6570090509ab5a156a24e2bbd082590d" title="Get elapsed time since tic.">vl_toc</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a6570090509ab5a156a24e2bbd082590d"></a><!-- doxytag: member="generic.c::vl_toc" ref="a6570090509ab5a156a24e2bbd082590d" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double vl_toc </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The function returns the processor time elapsed since <a class="el" href="generic_8h.html#a0eb9d2de6dc4cb6570db6bb3e8c39244" title="Reset processor time reference The function resets VLFeat TIC/TOC time reference.">vl_tic</a> was called last.</p>
<dl class="remark"><dt><b>Remarks:</b></dt><dd>In multi-threaded applications, there is an independent timer for each execution thread.</dd>
<dd>
On UNIX, this function uses the <code>clock()</code> system call. On Windows, it uses the <code>QueryPerformanceCounter()</code> system call, which is more accurate than <code>clock()</code> on this platform.</dd></dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>elapsed time in seconds. </dd></dl>

</div>
</div>
<a class="anchor" id="a8931cffd4ffeeaa43c217bf8005da38f"></a><!-- doxytag: member="generic.c::vl_unlock_state" ref="a8931cffd4ffeeaa43c217bf8005da38f" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void vl_unlock_state </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The function unlocks VLFeat global state mutex.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="generic_8h.html#ab305fa7aba6c2a4d543162fd3e146960" title="Lock VLFeat state.">vl_lock_state</a> </dd></dl>

</div>
</div>
<hr/><h2>Variable Documentation</h2>
<a class="anchor" id="a4103c75c5cf944bff8dce736cbb70070"></a><!-- doxytag: member="generic.c::_vl_state" ref="a4103c75c5cf944bff8dce736cbb70070" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structVlState.html">VlState</a> <a class="el" href="generic_8h.html#a4103c75c5cf944bff8dce736cbb70070">_vl_state</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>--------------------------------------------------------------- </p>

</div>
</div>
</div>
     <!-- Doc Here -->
    </div>
   
   </div>
   <div class="clear">&nbsp;</div>
  </div> <!-- pagebody -->
  <div id="footer">
   &copy; 2007-12 Andrea Vedaldi and Brian Fulkerson
  </div> <!-- footer -->

  <!-- Google Analytics Begins -->
  <script xml:space="preserve" type="text/javascript">
   //<![CDATA[
    var localre = /vlfeat.org/;
    if(document.location.host.search(localre) != -1)
    {
   var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
   document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
   }
   //]]>
  </script>
  <script xml:space="preserve" type="text/javascript">
    //<![CDATA[
    var localre = /vlfeat.org/;
    if(document.location.host.search(localre) != -1)
    {

   try {
   var pageTracker = _gat._getTracker("UA-4936091-2");
   pageTracker._trackPageview();
   } catch(err) {}

   }
   //]]>
  </script>
  <!-- Google Analytics Ends -->
 </body>
</html>

 
